#include <head.h>



// 信号集
int main(int argc, char const *argv[])
{
    printf("%d\n" , getpid());
    // 创建信号集
    sigset_t set;
    sigset_t oset;

    // 初始化信号集
    sigemptyset(&set);
    sigemptyset(&oset);
    
    // 在信号集中 添加 信号
    sigaddset( &set , SIGINT);
    sigaddset( &set , SIGUSR1);
    sigaddset( &set , SIGUSR2);


    // 开始阻塞信号
    sigprocmask( SIG_BLOCK , &set , NULL );   

    printf("开始阻塞\n");

    sleep(15);

    printf("阻塞结束\n");

    // 解除阻塞
    sigprocmask( SIG_UNBLOCK , &set , NULL );

    // 获取未决信号  未决信号 
    // 就是在阻塞过程中 其他进程 给当前进程所发送的信号  然后我们可以通过 sigpending 去将这些信号构成一个集合
    if(-1 == sigpending(&oset))
    {
        perror("sigpending error:");
    }

    if (sigismember(&oset , SIGINT))
    {
        printf("在阻塞的过程中 发送了一个 2 号\n");
    }

    if (sigismember(&oset , SIGUSR1))
    {
        printf("在阻塞的过程中 发送了一个 10 号\n");
    }

    if (sigismember(&oset , SIGUSR2))
    {
        printf("在阻塞的过程中 发送了一个 12 号\n");
    }
    
    while (1)
    {
        sleep(1);
    }

    return 0;
}



